package com.project.sianet.data.HttpClient;

import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Locale;
import java.text.SimpleDateFormat;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.HttpVersion;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpProtocolParams;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONTokener;

import com.project.sianet.R;
import com.project.sianet.data.Client.ActividadClient;
import com.project.sianet.entidades.Actividad;
import com.project.sianet.entidades.enumerator.TipoInfoAcademica;
import com.project.sianet.util.SessionManager;

import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
//import android.util.Log;

public class ActividadHttpClient implements ActividadClient {

	private final Context context;
    private final HttpClient httpClient;
//    private final SessionManager session;
    private SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.US);
    
    public ActividadHttpClient(Context context) {
    	
    	this.context = context;
//    	this.session = new SessionManager(context);
        
        BasicHttpParams params = new BasicHttpParams();
        HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
        HttpProtocolParams.setContentCharset(params, HTTP.DEFAULT_CONTENT_CHARSET);
        HttpProtocolParams.setUseExpectContinue(params, false);
        httpClient = new DefaultHttpClient(params);
    	
    }
    
    @Override
	public List<Actividad> Actividad_getAllByUsuario(String login, String perfil, String mes) {
    	
		List<Actividad> result = new ArrayList<Actividad>();
		String content = get("Calendario_getAllByUsuario/" + login.trim() + "/" + perfil + "/" + mes);
		
		if (content != null) {
			
			try {
				JSONTokener tokener = new JSONTokener(content);
				JSONArray array = (JSONArray) tokener.nextValue();
				for (int i = 0; i < array.length(); i++) {
                    JSONObject obj = array.getJSONObject(i);

                    Actividad a = new Actividad();
                    a.actCodigo = obj.getInt("Codigo");
                    a.actTipo = TipoInfoAcademica.values()[obj.getInt("Tipo")];
                    a.actTitulo = obj.isNull("Titulo") ? null : obj.getString("Titulo");
                    a.actTituloDetalle = obj.isNull("TituloDet") ? null : obj.getString("TituloDet");
                    a.actDetalle = obj.isNull("Detalle") ? null : obj.getString("Detalle");
                    a.actEnlace = obj.isNull("Enlace") ? null : obj.getString("Enlace");
                    a.actFechaPub = formatter.parse(obj.getString("FechaPub"));
                    a.actFechaIni = formatter.parse(obj.getString("FechaIni"));
                    a.actFechaFin = formatter.parse(obj.getString("FechaFin"));
                    a.actProfesor = obj.isNull("Profesor") ? null : obj.getString("Profesor");
                    a.actCurso = obj.isNull("Curso") ? null : obj.getString("Curso");
                    a.actPerfilUsuIngreso = obj.getInt("PerfilUsuario");
                    a.actNombreUsuario = obj.isNull("NombreUsuario") ? null : obj.getString("NombreUsuario");
                    
                	JSONArray archivos = obj.isNull("Archivos") ? new JSONArray() : obj.getJSONArray("Archivos");
                	List<String> actArchivos = new ArrayList<String>();
                	for (int i2 = 0; i2 < archivos.length(); i2++) {
                		actArchivos.add(archivos.getString(i2));
                	}
                	a.actArchivos = actArchivos;
                	
                	JSONArray urls = obj.isNull("Urls") ? new JSONArray() : obj.getJSONArray("Urls");
                	List<String> actEnlaces = new ArrayList<String>();
                	for (int i2 = 0; i2 < urls.length(); i2++) {
                		actEnlaces.add(urls.getString(i2));
                	}
                	a.actUrls = actEnlaces;

                    result.add(a);
                }
			} catch (Exception ex) {
				ex.printStackTrace();
			}    
			
		}
		
		return result;
	}
    
	private String get(String path) {
        try {
            HttpGet request = new HttpGet(getRequestURI(path));
//            request.setHeader("Authorization", SessionManager.getToken());
            HttpResponse res = httpClient.execute(request);
            String content = EntityUtils.toString(res.getEntity());
            return content;
        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
    }

    private URI getRequestURI(String path) throws URISyntaxException {
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
        String host = context.getString(R.string.pref_host_default) + prefs.getString("ColegioPF", "");
        URI requestURI = new URI(host + "/MobileService.svc/" + path);
        return requestURI;
    }


}
